/*
设有一个带头结点的循环单链表，其结点值为正整数，设计算法反复找出链表内最小值并不断输出，
并将结点从链表中删除，直到链表为空，再删除表头结点。
*/

#include <iostream>
#include "circlesinglefun.h"
using namespace std;

// 不断删除并输出最小值
void del(LNode *&L)
{
  // 辅助指针
  LNode *p, *minp, *u;
  
  // 遍历链表，直到链表只剩下头节点
  while (L->next != L)
  {
    // 用于遍历链表的指针
    p = L->next;
    
    // 记录链表的最小值的前一个结点
    minp = L;
    
    // 遍历链表
    while (p->next != L)
    {
      // 更新最小值结点
      if (p->next->data < minp->next->data)
        minp = p;
      
      // 遍历下一个结点
      p = p->next;
    }
    cout << "最小值为：";
    cout << minp->next->data << endl;
    
    // 删除最小值结点
    u = minp->next;
    minp->next = u->next;
    free(u);
  }
  
  // 删除头节点
  free(L);
}

int main()
{
  cout << "创建循环单链表：";
  
  // 创建循环单链表
  LNode *A = circle_single_link_list();
  
  // 不断删除并输出最小值
  del(A);
  return 0;
}